/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb;

import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author allam
 */
@Stateless
public class GestoreUtenteBean implements GestoreUtenteBeanLocal {
    @EJB
    private UtenteFacadeLocal utenteFacade;

        
/**
 * Aggiunge un nuovo utente
 * @param nome Nome dell'utente
 * @param cognome Cognome dell'utente
 * @param username Username dell'utente
 * @param pwd Password dell'utente
 * @param eMail E-Mail dell'utente
 * @param tipo tipo dell'utente
 * @return Utente se viene aggiunto alla tabella Utente, null altrimenti
 */
    @Override
    public Utente addUtente(String nome, String cognome, String username,String pwd,String eMail, String tipo){
        Utente ut = new Utente();
        ut.setNome(nome);
        ut.setCognome(cognome);
        ut.setUsername(username);
        ut.setPassword(pwd);
        ut.seteMail(eMail);
        ut.setTipo(tipo);  
        if (!utenteFacade.utenteEsistente(ut)) {
            utenteFacade.create(ut);
        }
        else {
            return null;
        }
        return ut;
    }
    /**
 * Effettua il login di un utente
 * @param u Username dell'utente che intende loggarsi
 * @param p Password dell'utente 
 * @return Utente loggato se i dati specificati erano corretti, null altrimenti
 */  
    @Override
    public Utente login(String u, String p){
        return utenteFacade.login(u, p);
    }
/**
 * Modifica i dati di un utente
 * @param nome Nome dell'utente
 * @param cognome Cognome dell'utente
 * @param username Username dell'utente
 * @param newpwd Nuova password dell'utente
 * @param oldpwd Vecchia password dell'utente
 * @param eMail E-Mail dell'utente
 * @param tipo tipo dell'utente
 * @return Utente se esiste gia' e se i suoi dati verranno aggiornati, null altrimenti
 */  
    @Override
    public Utente aggiorna(String nome, String cognome, String username, String oldpwd, String newpwd, String eMail, String tipo){
        Utente ut = utenteFacade.login(username, oldpwd);
        if (ut == null)
            return null; 
        ut.setNome(nome);
        ut.setCognome(cognome);
        ut.seteMail(eMail);
        ut.setPassword(newpwd);
        ut.setTipo(tipo);
        utenteFacade.edit(ut);  
        return ut;
    }
/**
 * Elimina un utente
 * @param ut Utente da eliminare
 */
    @Override
    public boolean elimina(Utente ut){
        if (!utenteFacade.utenteEsistente(ut))
            return false;
                    
        utenteFacade.remove(ut);
        return true;
    }
/**
 * Cerca l'utente specificato
 * @param idUtente Id dell'utente da cercare
 * @return Utente se l'id esiste, null altrimenti
 */ 
    @Override
    public Utente trova(Long idUtente){
        return utenteFacade.find(idUtente);
    }
/**
 * Mostra l'elenco completo degli utenti
 * @return Elenco degli utenti
 */ 
    @Override
    public List<Utente> trovaTutti(){
        return utenteFacade.findAll();
    }
    
    @Override
    public Utente addAdministartor(String nome, String cognome, String username,String pwd,String eMail){
        Utente ut = new Utente();
        ut.setNome(nome);
        ut.setCognome(cognome);
        ut.setUsername(username);
        ut.setPassword(pwd);
        ut.seteMail(eMail);
        ut.setTipo("a");  
        if (!utenteFacade.utenteEsistente(ut)) {
            utenteFacade.create(ut);
        }
        else {
            return null;
        }
        return ut;
        
    }
    public List mostraElenco(String username, String eMail, String tipo){
        return utenteFacade.findSome(username, eMail, tipo);
    }

}
